import requests,json
import pandas as pd

def geocode(address)-> str:    # geocode(高德API_key，结构化地址)
    """获取高德API的地理编码
    注释：key是指高德API的密钥，请先去注册
          address是指结构化地址，具体请查看：
    """         # 函数注释
    key = 'd2fd2a534f9fe0c5f1b7d4cc7c2b11cb'
    url = 'https://restapi.amap.com/v3/geocode/geo?parameters'
    params = {
        'key':'d2fd2a534f9fe0c5f1b7d4cc7c2b11cb',
        'address':address 
    }
    r = requests.get(url,params=params)
    results = r.json()['geocodes'][0]['location']
    # 返回值
    return results

def walking(key,origin,destination,sig = None,output = 'json',callback = None):
    """
    walking函数用于获取起始点到目的地间的步行路径
    在walking函数的参数中，key是指高德API的密钥，请先去注册；
    orgin为出发点，destination为目的地，这两个参数值必须为结构化地址的经纬度，获取经纬度请调用geo模块中的函数geocode
    """
    key = 'd2fd2a534f9fe0c5f1b7d4cc7c2b11cb'
    url = 'https://restapi.amap.com/v3/direction/walking?parameters'
    params = {
        'key':key,
        'origin':origin,
        'destination':destination,
        'output':'json'
    }

    r = requests.get(url,params=params)
    results = r.json()['route']['paths'][0]['steps']
    return pd.json_normalize(r.json()['route']['paths'][0]['steps'])     #将所得数据中的路段步行指示表格化

def integrated(origin,destination,cityd = None,extensions = 'base',strategy = 0,nightflag = 0,date = None,time= None,sig= None,output = 'json',callback = None):
    """
    transit函数用于规划综合各类公共（火车、公交、地铁）交通方式的通勤方案，并且返回通勤方案的数据。
    在transit函数的参数中，key是指高德API的密钥，请先去注册；
        orgin为出发点，destination为目的地，这两个参数值必须为结构化地址的经纬度，获取经纬度请调用geo模块中的函数geocode；
        city可选值有城市名称/citycode；cityd为跨城公交规划必填参数，可选值有城市名称/citycode；
        strategy为公交换乘策略，其中可选值：
                                0：最快捷模式
                                1：最经济模式
                                2：最少换乘模式
                                3：最少步行模式
                                5：不乘地铁模式
        nightflag为是否计算夜班车，其中可选值：0：不计算夜班车，1：计算夜班车
    """
    key = 'd2fd2a534f9fe0c5f1b7d4cc7c2b11cb'
    url = 'https://restapi.amap.com/v3/direction/transit/integrated?parameters'
    params = {
        'key':key,
        'origin':origin,
        'destination':destination,
        'city':"广东省广州市",
        'output':'json'
    }
    r = requests.get(url,params=params)
    results = r.json()['route']['transits'][0]['segments']
    return results

def weather(city,extensions='all',output = 'json'):
    """
    天气查询是一个简单的HTTP接口，根据用户输入的adcode，查询目标区域当前/未来的天气情况。
    在weather函数中，key是指高德API的密钥，请先去注册;
    其中，参数city为城市编码，输入城市的adcode，adcode信息可参考城市编码表https://lbs.amap.com/api/webservice/download；
              extensions为气象类型，可选值：base/all
                                            base:返回实况天气
                                            all:返回预报天气
    """
    url = 'https://restapi.amap.com/v3/weather/weatherInfo?parameters'
    params = {
        'key':'d2fd2a534f9fe0c5f1b7d4cc7c2b11cb',
        'city':city,
        'extensions' : 'all',
        'output':'json'
    }
    r = requests.get(url,params)
    weather = r.json()
    return weather


def around(location,keywords,output = 'json',callback=None,extensions = 'base'):
    """
    around函数用于周边搜索：在用户传入经纬度坐标点附近，在设定的范围内，按照关键字或POI类型搜索
    在around函数中，key是指高德API的密钥，请先去注册；
    location为搜索周边的地点参数值必须为结构化地址的经纬度，获取经纬度请调用geo模块中的函数geocode；
    keywords为搜索的关键词
    """
    url = 'https://restapi.amap.com/v3/place/around?parameters '
    params = {
        'key':'d2fd2a534f9fe0c5f1b7d4cc7c2b11cb',
        'location':location,
        'keywords':keywords,
        'output':'json',
        'extensions':'base'
    }
    r = requests.get(url,params=params)
    results = r.json()['pois']
    return results